import { ApiResponse, PaginationData } from '../interfaces/response.interface';

/**
 * 响应工具类
 * 提供统一的响应格式构建方法
 */
export class ResponseUtil {
  /**
   * 构建成功响应
   * @param data 响应数据
   * @param message 响应消息
   * @returns 统一格式的成功响应
   */
  static success<T>(data: T, message = 'success'): ApiResponse<T> {
    return {
      code: 0,
      message,
      data,
      timestamp: new Date().toISOString(),
    };
  }

  /**
   * 构建错误响应
   * @param code 错误码
   * @param message 错误消息
   * @param path 请求路径
   * @returns 统一格式的错误响应
   */
  static error(code: number, message: string, path?: string): ApiResponse<null> {
    return {
      code,
      message,
      data: null,
      timestamp: new Date().toISOString(),
      path,
    };
  }

  /**
   * 构建分页响应
   * @param items 数据列表
   * @param total 总数量
   * @param page 当前页码
   * @param pageSize 每页数量
   * @param message 响应消息
   * @returns 统一格式的分页响应
   */
  static pagination<T>(
    items: T[],
    total: number,
    page: number,
    pageSize: number,
    message = 'success',
  ): ApiResponse<PaginationData<T>> {
    const totalPages = Math.ceil(total / pageSize);
    
    return {
      code: 0,
      message,
      data: {
        items,
        total,
        page,
        pageSize,
        totalPages,
      },
      timestamp: new Date().toISOString(),
    };
  }
}